import router from "./router";
import store from "./store";
import { Message } from "element-ui";
import NProgress from "nprogress"; // progress bar
import "nprogress/nprogress.css"; // progress bar style
import { getToken, session } from "@/utils/auth"; // get token from cookie
import getPageTitle from "@/utils/get-page-title";
import Vue from "vue";
import showMessage from '@/utils/message.js'
NProgress.configure({ showSpinner: false }); // NProgress Configuration

const whiteList = ["/login"]; // no redirect whitelist

router.beforeEach(async (to, from, next) => {
  // start progress bar
  NProgress.start();

  // set page title
  document.title = getPageTitle(to.meta.title);

  // determine whether the user has logged in
  const hasToken = getToken();
  if (hasToken) {
    if (to.path === "/login") {
      // if is logged in, redirect to the home page
      next({ path: "/" });
      NProgress.done();
    } else {
      const hasGetUserInfo = store.getters.name; //从仓库中找用户名（可以直接找token）
      //const hasGetUserInfo = getToken()
      //console.log(hasGetUserInfo)
      if (hasGetUserInfo) {
        next();
      } else {
        try {
          // get user info
          const id = session.get("id");

          let res = await store.dispatch("user/getInfo", { id });
          if (res.code == 200) {
            //router.selfaddRoutes(store.state.user.resultAllRoutes);
            next({ ...to, replace: true });
          }
          // 通过用户权限获取导航列表
          // console.log(userinfo)
          // const roles = userinfo.data.sysUser.roles
          // console.log(roles);
          // store.dispatch('',{roles})
          // if (res.code == 200 && hasRoles) {
          //   console.log(store);
          //   router.addRoutes(store.state.user.resultAllRoutes)
          // }
          //next();
        } catch (error) {
        
          // remove token and go to login page to re-login
          await store.dispatch("user/resetToken");
          //Message.error(error.message);//|| "Has Error"
          showMessage(error.message)
          //Vue.prototype.msgError(error.Error || "Has Error");
          next(`/login?redirect=${to.path}`);
          NProgress.done();
        }
      }
    }
  } else {
    /* has no token*/

    if (whiteList.indexOf(to.path) !== -1) {
      // in the free login whitelist, go directly
      next();
    } else {
      // other pages that do not have permission to access are redirected to the login page.
      next(`/login?redirect=${to.path}`);
      NProgress.done();
    }
  }
});

router.afterEach(() => {
  // finish progress bar
  NProgress.done();
});
